package cn.cleanarch.infra.idp.s3.service;

import cn.cleanarch.infra.idp.commons.domain.dto.PageResult;
import cn.cleanarch.infra.idp.s3.domain.dto.S3CacheStatus;
import cn.cleanarch.infra.idp.s3.domain.dto.S3ConfigDTO;
import cn.cleanarch.infra.idp.s3.domain.dto.S3ConfigStatus;
import cn.cleanarch.infra.idp.s3.domain.entity.S3Config;
import cn.cleanarch.infra.idp.s3.domain.query.S3ConfigQuery;

import java.util.List;

/**
 * S3配置服务接口
 */
public interface S3ConfigService {

    /**
     * 分页查询S3配置
     *
     * @param query 查询参数
     * @return 分页结果
     */
    PageResult<S3ConfigDTO> pageQuery(S3ConfigQuery query);

    /**
     * 根据ID获取S3配置
     *
     * @param id 配置ID
     * @return S3配置
     */
    S3Config getById(Long id);

    /**
     * 创建S3配置
     *
     * @param dto 配置信息
     * @return 创建的配置
     */
    S3ConfigDTO create(S3ConfigDTO dto);

    /**
     * 更新S3配置
     *
     * @param dto 配置信息
     * @return 更新后的配置
     */
    S3ConfigDTO update(S3ConfigDTO dto);

    /**
     * 删除S3配置
     *
     * @param id 配置ID
     * @return 删除结果
     */
    Boolean delete(Long id);

    /**
     * 获取所有启用的S3配置
     *
     * @return 启用的配置列表
     */
    List<S3Config> getAllEnabledConfigs();

    /**
     * 根据业务类型获取S3配置
     *
     * @param businessType 业务类型
     * @return S3配置
     */
    S3Config getByBusinessType(String businessType);

    /**
     * 测试S3配置连接性
     *
     * @param id 配置ID
     * @return 测试结果
     */
    boolean testConnection(Long id);

    /**
     * 获取S3配置状态统计
     *
     * @return 配置状态统计
     */
    S3ConfigStatus getStatus();

    /**
     * 获取S3缓存状态
     *
     * @return 缓存状态
     */
    S3CacheStatus getCacheStatus();
}